﻿using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace serwer {
    class Main_Server {
        private static void Main(string[] args) {
            if (!CheckArgs(args)) {
                System.Console.WriteLine();
                System.Console.WriteLine("Składnia polecenia:");
                System.Console.WriteLine("\tserwer.exe [port]");
                System.Console.WriteLine("opcje:");
                System.Console.WriteLine("\tport - numer portu, na którym działać ma serwer (1-65535)");
                return;
            }
            Console.WriteLine("Aplikacja serwerowa");
            Console.WriteLine("Port: " + args[0]);
            Console.WriteLine("Wpisz \"help\" aby uzyskać listę dostępnych poleceń.");
            int port = Convert.ToInt32(args[0]);
            Server server = new Server(port);
            CommandInterpreter interpreter = new CommandInterpreter(server);
            Console.WriteLine(interpreter.ExecuteCommand("start"));
            while (true) {
                string input = Console.ReadLine();
                try {
                    string output = interpreter.ExecuteCommand(input);
                    Console.WriteLine(output);
                }
                catch (Exception) {
                    server.Stop();
                    break;
                }                
            }
        }

        /// <summary>
        /// Sprawdza poprawność składni argumentów przekazanych do programu.
        /// </summary>
        /// <param name="args">Tablica argumentów przekazanych do programu.</param>
        /// <returns>True, gdy składnia argumentów jest poprawna, false w przeciwnym wypadku.</returns>
        private static bool CheckArgs(string[] args) {
            if (args.Length == 1) {
                try {
                    int port = Convert.ToInt32(args[0]);
                    if (port >= 1 && port <= 65535) {
                        return true;
                    }
                    else return false;
                }
                catch (Exception) {
                    return false;
                }
            }
            else return false;
        }
        
    }
}
